import Cocoa

let numbers: [Double] = [3.2, 3.7, 3.5]

for number in numbers {
  print("Original: \(number)")
  print("Ceil: \(ceil(number))") // 向上取整
  print("Floor: \(floor(number))") // 向下取整
  print("Round: \(round(number))") // 四舍五入
  print("Trunc: \(trunc(number))") // 截断小数
  print("---")
}

// 返回一个数的平方根。

let value: Double = 9.0
let result = sqrt(value) // result will be 3.0

// 返回一个数的幂。
let base: Double = 2.0
let exponent: Double = 3.0
// let result = pow(base, exponent)  // result will be 8.0

// 返回一个数的绝对值。

let value2: Double = -5.0
let result2 = abs(value) // result will be 5.0

/**
 ceil 函数的核心逻辑是：

 如果给定的数字是整数，返回它本身。
 如果给定的数字是正浮点数，去掉小数部分，返回整数部分加一。
 如果给定的数字是负浮点数，去掉小数部分，返回整数部分。

 */
func customCeil(_ value: Double) -> Double {
  if value == Double(Int(value)) {
    return value // 是整数 直接返回本身
  } else if value > 0 {
    return Double(Int(value) + 1) // 正数, 向上取整
  } else {
    return Double(Int(value)) // 负数,取整数部分
  }
}

customCeil(-29.9)

//Int(a) a>0 向下取整; a<0 向上取整 裁剪小数
/**
 floor 函数的核心逻辑是：
 
 如果给定的数字是整数，返回它本身。
 如果给定的数字是负浮点数，去掉小数部分，返回整数部分减一。
 如果给定的数字是正浮点数，去掉小数部分，返回整数部分。
 
 */
func customFloor(_ value: Double) -> Double {
  if value == Double(Int(value)) {
    return value
  } else if value > 0 {
    return Double(Int(value)) // 取整
  } else {
    return Double(Int(value - 1)) // 减一取整
  }
}

Int(-3.7)
floor(-2.3)
customFloor(-2.3)
floor(-3.7)
customFloor(-3.7)
floor(-3.0)
customFloor(-3.0)

customFloor(3.2) // 输出 3.0
customFloor(3.0) // 输出 3.0
customFloor(-3.2) // 输出 -4.0
customFloor(-3.0) // 输出 -3.0
